package com.example.mapdata.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.example.mapdata.dao.UserDao;
import com.example.mapdata.dto.UserDto;
import com.example.mapdata.entity.User;
import com.example.mapdata.service.UserService;
import com.example.mapdata.utils.CodeRandomUtils;
import com.example.mapdata.utils.JwtUtils;
import io.jsonwebtoken.Claims;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.*;

/**
 * (User)表服务实现类
 *
 * @author makejava
 * @since 2024-09-23 14:22:53
 */
@Slf4j
@Service("userService")
public class UserServiceImpl implements UserService {
    @Resource
    private UserDao userDao;

    @Override
    public boolean getToken(String username, String password) {
        // 查询当前登录用户是否存在
        QueryWrapper qw = new QueryWrapper<>();
        qw.eq("username", username);
        qw.eq("password", password);
        User user = userDao.selectOne(qw);


        if (user != null) {
            Map<String, Object> map = new HashMap<>();
            map.put("username", username);
            map.put("password", password);
            // 获取Jwt令牌
            String jwt = JwtUtils.getJwt(map);
            ////        解析令牌
            //        Claims claims = JwtUtils.parseJwt();
            //        log.info("解析后的令牌为:{}", claims);

            return true;
        }
        return false;
    }

    /**
     * 注册一个新用户
     *
     * @param user
     * @return
     */
    @Override
    public boolean registerUser(User user) {
        int insert = userDao.insert(user);
        return insert > 0;
    }

    // /**
    //  * 根据用户名和密码判断用户是否存在
    //  *
    //  * @param username
    //  * @param password
    //  * @return
    //  */
    // @Override
    // public boolean isUserExist(String username, String password) {
    //     QueryWrapper qw = new QueryWrapper<>();
    //     qw.eq("username", username);
    //     qw.eq("password", password);
    //     User user = userDao.selectOne(qw);
    //     return user != null;
    // }

    /**
     * 根据用户名称获取用户信息
     *
     * @param username
     * @return
     */
    @Override
    public User getUserInfoByUserName(String username) {
        User user = userDao.getUserInfoByUsername(username);
        return user;
    }

    /**
     * 根据用户名称修改用户信息
     *
     * @param username
     * @param user
     * @return
     */
    @Override
    public boolean updateUserByUserName(String username, User user) {
        // QueryWrapper qw = new QueryWrapper<>();
        // qw.eq("username", username);
        int i = userDao.updateUser(username, user);
        return i > 0;
    }

    /**
     * 根据用户名称删除用户
     *
     * @param username
     * @return
     */
    @Override
    public boolean deleteUserByUserName(String username) {
        int i = userDao.deleteUser(username);
        return i > 0;
    }

    /**
     * 忘记密码 1. 根据手机号获取验证码
     *
     * @param phone
     * @param username
     * @return
     */
    @Override
    public String forgetPassword(String phone, String username) {
        // 生成验证码
        String code = CodeRandomUtils.generateCode();
        // 判断当前是否存在用户名以及电话号码相同的用户
        QueryWrapper qw = new QueryWrapper<>();
        qw.eq("phone", phone);
        qw.eq("username", username);

        User user = userDao.selectOne(qw);
        if (user != null) {
            return code;
        } else {
            return null;
        }
    }

    /**
     * 忘记密码 2. 修改当前用户的密码
     *
     * @param username
     * @param password
     * @return
     */
    @Override
    public boolean updateUserPassword(String username, String password) {
        QueryWrapper qw = new QueryWrapper<>();
        qw.eq("username", username);

        int i = userDao.updatePassword(username, password);
        return i > 0;
    }
}
